package br.com.velp.sudecap.mb.setor;

import br.com.velp.sudecap.comum.BaseController;
import br.com.velp.sudecap.comum.InterfaceCadastro;
import br.com.velp.sudecap.entidade.Setor;
import br.com.velp.sudecap.enumerator.EnumSimNao;
import br.com.velp.sudecap.enumerator.PaginaEnum;
import br.com.velp.sudecap.service.SetorService;
import br.com.velp.sudecap.util.JasperUtil;
import br.com.velp.sudecap.util.MensagemUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.faces.model.SelectItem;
import org.lindbergframework.spring.scope.AccessScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * <sumario>
 * <objetivo>"Rastreabilidade"</objetivo>
 * <autor>EDUARDO SANTOS DE OLIVEIRA</autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 04.10.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisito_afetado> N/A </requisito_afetado>
 * <descricao> Managed Bean Responsável Por Controlar as Operações de
 *             Inclusão/Alteração/Detalhamento de Setores 
 * </descricao>
 * </sumario>
 */
@Controller("manterSetor")
@AccessScoped
public class ManterSetor extends BaseController implements InterfaceCadastro {
    
    public static final Long serialVersionUID = 1L;
    
    private Setor setor;
    private Long idSetorSelecionado;
    private boolean isDetalhamento;
    
    @Autowired
    private SetorService setorService;

    @Override
    public String setup() {
        
        inicializar();
        
        return PaginaEnum.MANTER_SETOR.getValue();
        
    }

    @Override
    public String editSetup() {
        
        String pagina = setup();
        this.setor = this.setorService.obterPorId(this.idSetorSelecionado);
        
        return pagina;
        
    }

    @Override
    public String detalhar() {
        
        String pagina = editSetup();
        this.isDetalhamento = Boolean.TRUE;
        
        return pagina;
        
    }

    @Override
    public String salvar() throws Exception {
        
        try {
            
            if (this.setor.getId() == null) {
                this.setor.setIdUsuarioCadastro(getContexto().getUsuario().getId());
                this.setor.setDataCadastro(new Date());
                this.setorService.salvar(this.setor);
            } else {
                this.setor.setIdUsuarioAlteracao(getContexto().getUsuario().getId());
                this.setor.setDataAlteracao(new Date());
                this.setorService.atualizar(this.setor);
            }
            
            this.isDetalhamento = Boolean.TRUE;
            MensagemUtil.exibirMensagemInformacao(MensagemUtil.getMensagem("registro_salvo_sucesso"));
            
        } catch (Exception ex) {
            
            tratarExcessao(ex);
            
        }
        
        return null;
        
    }

    @Override
    public String voltar() {
        
        return PaginaEnum.CONSULTAR_SETOR.getValue();
        
    }

    public void inicializar() {
        
        this.setor = new Setor();
        this.setor.setAtivo(Boolean.TRUE);
        this.isDetalhamento = Boolean.FALSE;
        
    }
    
    private HashMap<String, Object> getParametrosIreport(){
        
        HashMap<String, Object> parametros = obterParametrosPadraoRelatorios();
        parametros.put("TITULO", "CADASTRO DE SETORES");
        
        return parametros;
        
    }
    
    public String exportarCadastroXLS(){
        
        this.setor = this.setorService.obterPorId(this.setor.getId());
        
        List setor = new ArrayList();
        setor.add(this.setor);
        
        JasperUtil.gerarArquivoXLS(
                "/relatorios/export_cadastro/setor/Cadastro_Setor.jasper", 
                "Cadastro_Setor", 
                setor, 
                getParametrosIreport());
        
        return null;
        
    }
    
    public String exportarCadastroPDF(){
        
        this.setor = this.setorService.obterPorId(this.setor.getId());
        
        List setor = new ArrayList();
        setor.add(this.setor);
        
        JasperUtil.gerarArquivoPDF(
                "/relatorios/export_cadastro/setor/Cadastro_Setor.jasper", 
                "Cadastro_Setor", 
                setor, 
                getParametrosIreport());
        
        return null;
        
    }                   
    
    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed"> 
    public List<SelectItem> getListaSimNao() {
        return obterSelectItemPopulado(true, EnumSimNao.values());
    }
    
    public Setor getSetor() {
        return setor;
    }

    public void setSetor(Setor setor) {
        this.setor = setor;
    }
    
    public Long getIdSetorSelecionado() {
        return idSetorSelecionado;
    }

    public void setIdSetorSelecionado(Long idSetorSelecionado) {
        this.idSetorSelecionado = idSetorSelecionado;
    }
    
    public boolean isIsDetalhamento() {
        return isDetalhamento;
    }

    public void setIsDetalhamento(boolean isDetalhamento) {
        this.isDetalhamento = isDetalhamento;
    }
    // </editor-fold>        
    
}
